package digitrencer;

//commented by Gergő
/**
 * Az alkatrészek gyűjtőosztálya. Az összes alkatrészt ebből az osztályból származtatjuk.
 * @author taplonaplo
 */

public abstract class Element {
        /**
         * A kimeneti vezetékek tömbje.
         */
	protected Wire[] out;
        /**
         * A bemeneti vezetékek tömbje.
         */
	protected Wire[] in;

        /**
         * Az Element osztály konstruktora.
         * @param inputs    Bemeneti vezetékek
         * @param outputs   Kimeneti vezetékek
         * @throws IllegalArgumentException Amennyiben valamelyik kimeneti vezeték már meg van hajtva.
        */
        Element(Wire[] inputs, Wire[] outputs){
            in = inputs;
            out = outputs;
            for (Wire o : out) {
                if (o.getHasInput()) {
                    throw new IllegalArgumentException("Egy vezetéknek nem lehet több alkatrész a bementére kötve!");
                } else o.setHasInput(true);
            }
        }

        /**
         * A kapuk futási metódusa. Ezt a különböző kapukra külön-külön
         * valósítjuk meg.
         * @throws UnstableNetworkException Instabil hálózat esetén.
         */
	public abstract void run() throws UnstableNetworkException;
}